package com.example.deepschool.service.User;

import com.example.deepschool.Model.Response.ResponseData;
import org.springframework.web.multipart.MultipartFile;

/**
 * 用户服务接口，提供用户注册、登录、信息查询、更新、删除等操作。
 */
public interface User {
	
	/**
	 * 注册新用户。
	 *
	 * @param user 新用户对象，包含必要信息如用户名、密码等。
	 */
	void register (com.example.deepschool.Model.User user);
	
	/**
	 * 通过用户名登录。
	 *
	 * @param user 包含用户名和密码的用户对象。
	 * @return 登录成功的用户对象。
	 */
	com.example.deepschool.Model.User login_username (com.example.deepschool.Model.User user);
	
	/**
	 * 通过邮箱登录。
	 *
	 * @param user 包含邮箱和密码的用户对象。
	 * @return 登录成功的用户对象。
	 */
	com.example.deepschool.Model.User login_email (com.example.deepschool.Model.User user);
	
	/**
	 * 根据ID获取用户信息。
	 *
	 * @param id 用户ID。
	 * @return 相应的用户对象。
	 */
	com.example.deepschool.Model.User getUserById (long id);
	
	/**
	 * 更新用户信息。
	 *
	 * @param user 更新后的用户对象。
	 * @param UUID 用户唯一标识符。
	 * @return 更新后的用户对象。
	 */
	com.example.deepschool.Model.User updateUser (com.example.deepschool.Model.User user, String UUID);
	
	/**
	 * 上传头像并更新用户信息。
	 *
	 * @param file       用户上传的头像文件。
	 * @param fileSHA256 头像文件的SHA256校验码。
	 * @param UUID       用户唯一标识符。
	 * @return 更新后的用户对象。
	 */
	com.example.deepschool.Model.User putAvatar (MultipartFile file, String fileSHA256, String UUID);
	
	/**
	 * 获取用户的头像。
	 *
	 * @param UUID 用户唯一标识符。
	 * @return 头像的响应体。
	 */
	ResponseData getAvatar (String UUID, String range);
	
	/**
	 * 更新用户密码。
	 *
	 * @param oldPassword  原密码。
	 * @param newPassword  新密码。
	 * @param newPassword2 新密码确认。
	 * @param UUID         用户唯一标识符。
	 */
	void updatePassword (String oldPassword, String newPassword, String newPassword2, String UUID);
	
	/**
	 * 删除用户。
	 *
	 * @param id 用户ID。
	 * @return 删除操作的影响行数。
	 */
	int deleteUser (long id);
	
	/**
	 * 用户登出。
	 *
	 * @param UUID 用户唯一标识符。
	 */
	void logout (String UUID);
}
